1. The Field of the Invention
The present invention relates to the field of computing, and more particularly, to software, methods and systems that facilitate platform independent software binding to and accessing platform dependent software.
2. Description of Relevant Art
In recent years significant efforts have been made to facilitate the creation of platform independent software. This is, software that can execute on multiple different platforms (e.g. different types of computer system), without requiring the software program to be rewritten or customized to operate on specific platforms. By way of example, the Java programming language is designed to facilitate the creation of Java software objects that are platform independent. However, in certain situations, it is desirable for a particular software object to make use of specific platform dependent code to access specific hardware functionality. One such class of software objects is device drivers.
A device driver is software used to control hardware coupled with the computer system. Usually, the peripheral device functions to provide data input and/or output (“I/O”) to the computer system. Examples of peripheral devices include keyboards, printers, scanners, network interface and graphics cards, modems, and monitors. In general, device drivers process data being to be sent to or retrieved from the peripheral device by the computer system so that the data is transferred in a format suitable for processing by the peripheral device or computer system.
The intimate association between the device driver and the hardware and software of both the peripheral device and the computer system to which the device is couple has required that device drivers be written in a highly platform-dependent manner. For example, device drivers generally must obtain memory resources when called to perform their function. Typically, this requires the allocation of memory resources that must be described by the driver. The driver must therefor have specific knowledge about the platform in order to make such a request. Thus, the same peripheral device, e.g., a printer, will require different version of device (printer) driver software for each platform.
The platform dependence of driver software thus increases the costs of developing platforms and peripherals, as manufactures of peripherals and computer operating systems must provide new versions and updates of driver software for new peripherals, new software platforms, and new operating system releases. Platform-dependent driver technology also increases the cost of maintaining computer systems, especially diverse computer systems deployed over networks, as system managers must obtain and install new and updated device drivers to enable user access to peripheral devices.
One approach to solving the problem of running platform independent software objects with platform dependent software (such as drivers) is to provide software objects that include one part that is platform independent and another part that is platform dependent. However, this “mixed” software approach is generally undesirable since such mixed objects require the platform dependent part to include different versions of the platform dependent code for each platform that the service will ultimately be loaded upon. Maintaining so many different versions in the same software object is both unwieldy and wasteful.
Therefore, it would be advantageous to provide a mechanism that provides for platform-independent software objects to efficiently bind to and access platform dependent software.